export default function(functionName = 'openCallback') {
  return {
    __mixinOpenCallbackName: functionName,
    data() {
      return {
        // 内部用控制弹窗打开关闭
        show: false
      }
    },
    props: {
      // 外部传入value
      value: {
        type: Boolean,
        default: false
      }
    },
    computed: {
      innerOpenCallback() {
        return this[this.$options['__mixinOpenCallbackName']]
      }
    },
    watch: {
      value: {
        handler: function(val) {
          this.show = val
          // 当val=true时表示弹窗被打开
          if (val && this.innerOpenCallback) {
            this.innerOpenCallback()
          }
        },
        immediate: true
      },
      show(val) {
        if (val !== this.value) {
          this.$emit('update:value', val)
        }
      }
    }
  }
}
